package com.wei.czz.framework.admin.service;

import com.wei.czz.common.po.RolePo;
import com.wei.czz.framework.admin.entity.UserEntity;
import com.wei.czz.framework.admin.entity.UserRoleEntity;

import java.util.List;
import java.util.Set;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2021-03-15 10:28:45
 * className: UserRoleService 用户和角色关联操作请求服务接口
 * version: 1.0
 * description:
 */
public interface UserRoleService {

    /**
     * 批量保存用户与角色关联操作
     * @param userRoleList 用户与角色关联对象列表
     */
    void batchSave(List<UserRoleEntity> userRoleList);

    /**
     * 获取用户关联角色列表操作
     * @param idList 主键列表
     * @return 用户与角色关联对象列表
     */
    List<UserRoleEntity> getList(List<Long> idList);

    /**
     * 获取角色主键数据操作
     * 根据用户主键，获取用户关联的角色主键数据
     * @param userId 用户主键
     */
    List<String> getRoleIdList(Long userId);

    /**
     * 获取用户权限列表操作
     * @param userId 用户
     * @return 用户权限列表
     */
    List<RolePo> findUserPermitList(Long userId);

    /**
     * 获取用户与角色关联数据操作
     * @param userId       用户主键
     * @param roleId       角色主键
     * @param deleteStatus 删除状态
     * @return 用户与角色关联列表
     */
    List<UserRoleEntity> findList(Long userId, Long roleId, Integer deleteStatus);

    /**
     * 获取角色关联用户主键操作
     * @param roleId 角色主键
     * @return 用户主键集合
     */
    Set<Long> getUserIdSet(Long roleId);

    /**
     * 获取角色关联用户列表操作
     * @param roleId 角色主键
     * @return 用户列表
     */
    List<UserEntity> getUserList(Long roleId);

    /**
     * 获取用户关联角色操作
     * @param userIdList       用户主键列表
     * @param roleIdList       角色主键列表
     * @param relationModeList 关联模式列表
     * @return 用户关联角色对象列表
     */
    List<UserRoleEntity> findUserRoleList(List<Long> userIdList, List<Long> roleIdList, List<Integer> relationModeList);

    /**
     * 批量修改用户关联角色操作
     * @param userRoleList 用户关联角色对象列表
     */
    void batchUpdate(List<UserRoleEntity> userRoleList);

    /**
     * 删除角色关联用户数据操作
     * 1、用户主键列表和角色主键列表，批量删除用户关联角色数据
     * 2、根据传入的用户主键列表是否为空，进而确定是删除特定用户关联的角色数据，还是所有用户关联的角色数据
     * @param userIdList 用户主键列表
     * @param roleIdList 角色主键列表
     */
    void deleteUserRole(List<Long> userIdList, List<Long> roleIdList);

    /**
     * 解除用户关联角色操作
     * @param relationIdList 关联主键列表
     */
    void unassociatedUserRole(List<Long> relationIdList);
}

